//package net.tavion.angelboot.common.exception;
//
//
//import com.netflix.client.ClientException;
//import lombok.extern.slf4j.Slf4j;
//import net.tavion.angelboot.common.enums.SystemCode;
//import net.tavion.angelboot.common.vo.GenericResponse;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.validation.BindException;
//import org.springframework.validation.FieldError;
//import org.springframework.web.bind.MethodArgumentNotValidException;
//import org.springframework.web.bind.annotation.ControllerAdvice;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import java.util.HashMap;
//import java.util.List;
//
//@Configuration
//@ControllerAdvice
//@Slf4j
//public class GlobalExceptionHandler {
//    public GlobalExceptionHandler() {
//    }
//
//
//
//    @ExceptionHandler({ClientException.class})
//    @ResponseBody
//    public GenericResponse<?> handNoHandlerFoundException(ClientException nhfe) {
//        if (log.isErrorEnabled()) {
//            log.error("There is unexpected error (type=Not Found, status=404).");
//        }
//        return processResponseDTO(SystemCode.SYSTEM_404.getCode(),SystemCode.SYSTEM_404.getMessage());
//    }
//
//    @ExceptionHandler({AngelException.class})
//    @ResponseBody
//    public GenericResponse<?> handBusinessException(AngelException se) {
//        if (log.isErrorEnabled()) {
//            log.error("Unexpected service exception occur at requesting uri. nestException ==>> {}", se);
//        }
//
//        return processResponseDTO(se.getErrorCode(),se.getMessage());
//    }
//
//    @ExceptionHandler({MethodArgumentNotValidException.class})
//    @ResponseBody
//    public GenericResponse<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException error) {
//        List<FieldError> errors = error.getBindingResult().getFieldErrors();
//        return processResponseDTO(SystemCode.ARGMENT_ERROR.getCode(),SystemCode.ARGMENT_ERROR.getMessage());
//    }
//
//    @ExceptionHandler({BindException.class})
//    @ResponseBody
//    public GenericResponse<?> handleBindException(BindException error) {
//        List<FieldError> errors = error.getBindingResult().getFieldErrors();
//
//        return processResponseDTO(SystemCode.BEAN_VALIDATION_ERROR.getCode(),SystemCode.BEAN_VALIDATION_ERROR.getMessage());
//    }
//
//    @ExceptionHandler({Exception.class})
//    @ResponseBody
//    public GenericResponse<?> handException(Exception e) {
//        if (log.isErrorEnabled()) {
//            log.error("Unexpected exception occur at requesting uri . nestException ==>> {}", e);
//        }
//
//        return processResponseDTO(SystemCodea.SYSTEM_CALL_ERROR.getCode(),SystemCode.SYSTEM_CALL_ERROR.getMessage());
//    }
//
//    private <T> GenericResponse<T> processResponseDTO(String msgCd, String msgInfo) {
//        GenericResponse genericResponse=new GenericResponse();
//        genericResponse.setCode(msgCd);
//        genericResponse.setMessage(msgInfo);
//        genericResponse.setData(new HashMap());
//
//        return genericResponse;
//    }
//}
